package co.com.losalpes.marketplace.picontract.entities;

import co.com.losalpes.marketplace.picontract.bo.ContratoBO;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@NamedQueries({@javax.persistence.NamedQuery(name="consultarContratoPorRadicado", query="select c from Contrato c where c.numeroRadicacion = :numeroRadicacion"), @javax.persistence.NamedQuery(name="consultarContratoFabricanteNitEstado", query="select c from Contrato c where c.fabricante.nit = :nit and c.estado = :estado"), @javax.persistence.NamedQuery(name="consultarContratoComercioNitEstado", query="select c from Contrato c where c.comercio.nit = :nit and c.estado = :estado")})
@Table(name="contrato")
public class Contrato implements Serializable
{
  private static final long serialVersionUID = 1L;

  @Id
  @Column(name="numeroRadicacion")
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Long numeroRadicacion;

  @Column(name="fechaInicio")
  @Temporal(TemporalType.DATE)
  private Date fechaInicio;

  @Column(name="fechaTerminacion")
  @Temporal(TemporalType.DATE)
  private Date fechaTerminacion;

  @Column(name="duracionContrato")
  private Long duracionContrato;

  @Column(name="periodicidad")
  private String periodicidad;

  @Column(name="numeroCiclos")
  private Long numeroCiclos;

  @Column(name="valorContrato")
  private Long valorContrato;

  @Column(name="cantidad")
  private Long cantidad;

  @OneToOne
  private Comercio comercio;

  @OneToOne
  private Fabricante fabricante;
  private PurchaseOrder orden;

  @OneToOne
  private Producto producto;

  @Column(name="fechaAprobacionComercio")
  @Temporal(TemporalType.DATE)
  private Date fechaAprobacionComercio;

  @Column(name="fechaAprobacionFabricante")
  @Temporal(TemporalType.DATE)
  private Date fechaAprobacionFabricante;

  @Column(name="estado")
  private String estado;

  @Column(name="motivo_cancelacion")
  private String motivoC;

  @Column(name="valorContartoComercio")
  private Long valorContratoComercio;

  public ContratoBO toBO()
  {
    ContratoBO contratoBO = new ContratoBO();
    contratoBO.setCantidad(getCantidad());
    contratoBO.setComercio(getComercio().toBO());
    contratoBO.setDuracionContrato(getDuracionContrato());
    contratoBO.setEstado(getEstado());
    contratoBO.setFabricante(getFabricante().toBO());
    contratoBO.setFechaAprobacionComercio(getFechaAprobacionComercio());
    contratoBO.setFechaAprobacionFabricante(getFechaAprobacionFabricante());
    contratoBO.setFechaInicio(getFechaInicio());
    contratoBO.setFechaTerminacion(getFechaTerminacion());
    contratoBO.setNumeroCiclos(getNumeroCiclos());
    contratoBO.setNumeroRadicacion(getNumeroRadicacion());

    contratoBO.setPeriodicidad(getPeriodicidad());
    contratoBO.setValorContrato(getValorContrato());
    contratoBO.setValorContratoComercio(getValorContratoComercio());
    contratoBO.setMotivoCancelacion(getMotivoC() != null ? getMotivoC() : "");
    return contratoBO;
  }

  public Long getNumeroRadicacion() {
    return this.numeroRadicacion;
  }

  public Date getFechaInicio() {
    return this.fechaInicio;
  }

  public Date getFechaTerminacion() {
    return this.fechaTerminacion;
  }

  public Long getCantidad() {
    return this.cantidad;
  }

  public Comercio getComercio() {
    return this.comercio;
  }

  public Long getDuracionContrato() {
    return this.duracionContrato;
  }

  public String getEstado() {
    return this.estado;
  }

  public Fabricante getFabricante() {
    return this.fabricante;
  }

  public Date getFechaAprobacionComercio() {
    return this.fechaAprobacionComercio;
  }

  public Date getFechaAprobacionFabricante() {
    return this.fechaAprobacionFabricante;
  }

  public Long getNumeroCiclos() {
    return this.numeroCiclos;
  }

  public PurchaseOrder getOrden() {
    return this.orden;
  }

  public String getPeriodicidad() {
    return this.periodicidad;
  }

  public static long getSerialVersionUID() {
    return 1L;
  }

  public Long getValorContrato() {
    return this.valorContrato;
  }

  public String getMotivoC() {
    return this.motivoC;
  }

  public Producto getProducto() {
    return this.producto;
  }

  public void setNumeroRadicacion(Long id) {
    this.numeroRadicacion = id;
  }

  public void setFechaInicio(Date fechaInicio) {
    this.fechaInicio = fechaInicio;
  }

  public void setFechaTerminacion(Date fechaTerminacion) {
    this.fechaTerminacion = fechaTerminacion;
  }
  public void setCantidad(Long cantidad) {
    this.cantidad = cantidad;
  }

  public void setComercio_id(Comercio comercio) {
    this.comercio = comercio;
  }

  public void setDuracionContrato(Long duracionContrato) {
    this.duracionContrato = duracionContrato;
  }

  public void setEstado(String estado) {
    this.estado = estado;
  }

  public void setFabricante_id(Fabricante fabricante) {
    this.fabricante = fabricante;
  }

  public void setFechaAprobacionComercio(Date fechaAprobacionComercio) {
    this.fechaAprobacionComercio = fechaAprobacionComercio;
  }

  public void setFechaAprobacionFabricante(Date fechaAprobacionFabricante) {
    this.fechaAprobacionFabricante = fechaAprobacionFabricante;
  }

  public void setNumeroCiclos(Long numeroCiclos) {
    this.numeroCiclos = numeroCiclos;
  }

  public void setOrden_id(PurchaseOrder orden) {
    this.orden = orden;
  }

  public void setPeriodicidad(String periodicidad) {
    this.periodicidad = periodicidad;
  }

  public void setValorContrato(Long valorContrato) {
    this.valorContrato = valorContrato;
  }

  public void setComercio(Comercio comercio) {
    this.comercio = comercio;
  }

  public void setFabricante(Fabricante fabricante) {
    this.fabricante = fabricante;
  }

  public void setMotivoC(String motivoC) {
    this.motivoC = motivoC;
  }

  public void setOrden(PurchaseOrder orden) {
    this.orden = orden;
  }

  public Long getValorContratoComercio() {
    return this.valorContratoComercio;
  }

  public void setValorContratoComercio(Long valorContratoComercio) {
    this.valorContratoComercio = valorContratoComercio;
  }

  public void setProducto(Producto producto) {
    this.producto = producto;
  }

  public int hashCode()
  {
    int hash = 0;
    hash += (this.numeroRadicacion != null ? this.numeroRadicacion.hashCode() : 0);
    return hash;
  }

  public boolean equals(Object object)
  {
    if (!(object instanceof Contrato)) {
      return false;
    }
    Contrato other = (Contrato)object;
    if (((this.numeroRadicacion == null) && (other.numeroRadicacion != null)) || ((this.numeroRadicacion != null) && (!this.numeroRadicacion.equals(other.numeroRadicacion)))) {
      return false;
    }
    return true;
  }

  public String toString()
  {
    return "co.com.losalpes.marketplace.transact.entities.Contrato[id=" + this.numeroRadicacion + "]";
  }
}